/* 

1 在所有的接口响应值中  一些规范
  1 返回值 一般是对象格式
    code: 后端自己可以的定义 错误码   “0：正常 , 1:网络繁忙 2 :没有权限，200：查询成功”
    msg:文字提示说明 和 code 来搭配 
    data: 真实的数据的返回值！！ 

  2 code 错误码  200 正常  500 错误！！ 

*/

const express = require("express");
const path = require("path");
const Router = express.Router();
const sqlHelper = require("../utils/sqlHelper");

const multer = require('multer')
const storage = multer.diskStorage({
  // 指定存放文件的文件夹 地址
  destination: function (req, file, cb) {
    cb(null, 'uploads/')
  },
  // 地址文件的名称 
  filename: function (req, file, cb) {
    console.log(file);

    // 获取文件的后缀名
    // const extName = file.originalname.split(".")[1];
    const extName = path.extname(file.originalname);// .jpg 

    // 随机生成一个串 文件名  jpt png gif 
    const uniqueSuffix = Date.now() + '-' + Math.round(Math.random() * 1E9);
    cb(null, uniqueSuffix + extName);
  }
})

const upload = multer({ storage: storage })


// 查询所有  get
Router.get("/getHeroList", (req, res) => {
  // 只查询 想让用户看见的数据 
  sqlHelper(` select id,name,gender,img from heros where isdelete=0 `, (err, results) => {
    if (err) {
      console.log(err.message);// 结合 错误日志 
      res.send({ code: 500, data: null, msg: "查询失败" });
    } else {
      console.log("查询成功");
      res.send({ code: 200, data: results, msg: "查询成功" });
    }

  });
});


// 查询单个  get
Router.get("/getHeroById", (req, res) => {
  // 1 先获取 参数 id 
  const { id } = req.query;

  // 2 直接写sql 来查询数据
  sqlHelper(`select id,name,gender,img from heros where id = ${id} and isdelete = 0 `, (err, results) => {
    if (err) {
      res.send({ code: 500, data: null, msg: "查询失败" });
    } else {
      res.send({ code: 200, data: results[0], msg: "查询成功" });

    }
  })
});

// 添加英雄  post
Router.post("/addHero", (req, res) => {
  // 1 获取提交过来数据  (额外加一个配置)
  const { name, gender, img } = req.body;

  sqlHelper(` insert into heros(name,gender,img) values('${name}','${gender}','${img}') `, (err, results) => {
    if (err) {
      res.send({ code: 500, data: null, msg: "添加失败" });
    } else {
      res.send({ code: 200, data: null, msg: "添加成功" });
    }
  });
});

// 更新英雄  post
Router.post("/updateHero", (req, res) => {
  // 1 获取 用户提交过来的 参数 req.body  (假设用户修改英雄数据的时候 修改全部的属性)
  // name, gender , img , id不能改！！ isdelete 不能！！！
  // 用户修改数据的时候 必须要id 提交到后端 

  const { id, name, gender, img } = req.body;
  sqlHelper(` update heros set name =  '${name}', gender = '${gender}' , img = '${img}' where id = ${id} `, (err, results) => {
    if (err) {
      res.send({ code: 500, data: null, msg: "修改失败" });
    } else {
      res.send({ code: 200, data: null, msg: "修改成功" });
    }
  })

});

// 删除单个英雄  get
Router.get("/delHeroById", (req, res) => {
  // 1 获取用户的提交的参数  id   req.query 
  const { id } = req.query;
  // 用户所执行的删除 - 本质 修改了某个字段而已！！ 
  sqlHelper(` update heros set  isdelete=1 where id = ${id} `, (err, results) => {
    if (err) {
      res.send({ code: 500, data: null, msg: "删除失败" });
    } else {
      res.send({ code: 200, data: null, msg: "删除成功" });
    }
  });
});


// 上传英雄头像 post   要借助第三方模块的帮助 multer 
// avatar 文件上传的 要指定的key的名称！！ 
Router.post("/uploadFile", upload.single('avatar'), (req, res) => {
  // 返回成功的提示  不需要加 upload/ 文件目录的！！ 
  res.send("http://127.0.0.1:8001/" + req.file.filename);
})

module.exports = Router;